﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using CRUD.InterfaceDAO;
using CapaNegocios;
using GestionadorBaseDatos;

namespace CapaGestion
{
    /// <summary>
    /// Gestiona la asignacion de los usuarios a  los eventos
    /// </summary>
    public class GestionarProporcion : IGestionProporcion
    {
        private IDaoProporcion daoProporcion;
        private IDaoEvento daoEvento;
        private IDaoApuesta daoApuesta;
        private IDaoParticipante daoParticipante;
        private IList proporcionesDevueltas = new ArrayList();

        /// <summary>
        /// Metodo trae lista de proporciones dado un participante
        /// </summary>
        /// <param name="idparticipante">id del participante involucrado en la proporcion</param>
        /// <returns>Lista de las proporciones donde se encuentre el participante</returns>
        public IList GetByParticipante(int idparticipante)
        {
            return agregarEventosParticipantes(daoProporcion.GetByParticipante(idparticipante));
        }

        /// <summary>
        /// Metodo que reune una lista de proporciones de un evento dado
        /// </summary>
        /// <param name="idevento">id del evento involucrado en las proporciones</param>
        /// <returns>lista con las proporciones del evento</returns>
        public IList GetByEvento(int idevento)
        {
            return agregarEventosParticipantes(daoProporcion.GetByEvento(idevento));

        }

        /// <summary>
        /// metodo para insertar una nueva proporcion
        /// </summary>
        /// <param name="crearForma"></param>
        public void Insert(Proporcion crearForma)
        {
            daoProporcion.Insert(crearForma);
        }

        /// <summary>
        /// Metodo para traerse todas las proporciones del sistema
        /// </summary>
        /// <returns>Lista con todas las proporciones encontradas</returns>
        public IList GetAll()
        {
            return (agregarEventosParticipantes(daoProporcion.GetAll()));
        }

        /// <summary>
        /// Metodo recibe una lista de proporciones para completar el resto de sus objetos
        /// </summary>
        /// <param name="agregarDatos">lista de proporciones a completar</param>
        /// <returns>Lista completa del tipo proporcion</returns>
        public IList agregarEventosParticipantes(IList agregarDatos)
        {
            int numeroCampos = agregarDatos.Count;
            for (int i = 0; i < numeroCampos; i++)
            {
                Proporcion agregar = (Proporcion)agregarDatos[i];
                agregar.Participante = daoParticipante.GetById(((Proporcion)agregarDatos[i]).Participante);
                agregar.EventoAsociado = daoEvento.GetById(((Proporcion)agregarDatos[i]).EventoAsociado.IdEvento);
                proporcionesDevueltas.Add(agregar);
            }
            return proporcionesDevueltas;

        }

        /// <summary>
        /// metodo para completar los objetos de una proporcion
        /// </summary>
        /// <param name="agregarDatos">Objeto tipo proporcion a completar</param>
        /// <returns>Objeto Proporcion con todos sus datos</returns>
        public Proporcion apuestaEventoParticipante(Proporcion agregarDatos)
        {
            agregarDatos.EventoAsociado = daoEvento.GetById(agregarDatos.EventoAsociado.IdEvento);
            agregarDatos.Participante = daoParticipante.GetById(agregarDatos.Participante);
            return agregarDatos;
        }

        /// <summary>
        /// Metodo para updatear un objeto proporcion en el sistema
        /// </summary>
        /// <param name="p">Objeto a updatear</param>
        public void Update(Proporcion p)
        {
            daoProporcion.Update(p);
        }

    }
}